<?php

/**
 * アプリケーションDB
 *
 * @package     App
 * @subpackage  class
 * @author      $Author: moriwaki $
 * @version     $Id: App_Page.php 358 2008-06-28 06:50:24Z moriwaki $
 */
class App_DB
{
    /**
     * マスターDB (INSERT DB)
     */
    public static $default = 'mysqli://bear_demo:password@localhost/bear_demo';

    /**
     * スレーブDB (SELECT DB)
     */
    public static $slave = 'mysqli://bear_demo:password@localhost/bear_demo';
    
    /**
     * DBインスタンス取得
     * 
     * 親クラスのgetInstace()からDSNにDBドライバオブジェクトを取得
     * 
     * @param $dsn string
     * @param $option
     * @return MDB2_Driver_Datatype_mysqli
     */
    public function getInstance($dsn = false, $option = array())
    {
        if (!$dsn){
            $dsn = self::$default;
        }
        //オプション設定
        $option['default_table_type'] = 'INNODB';
        $option['use_transactions'] = true;
        // インスタンス取得
        $app_db = BEAR_Mdb2::getInstance($dsn, $option);
        // 拡張機能ロード
        $app_db->loadModule('Extended');
        // すべてのフィールド識別子が SQL 文中で自動的にクォート
        $app_db->setOption('quote_identifier', true);
        return $app_db;
    }

    /**
     * getQueryResult
     *
     * @param string $sql SQL文
     * @param string $pagerOption ページャーオプション
     * @param string $type Resultタイプ(one or pager)
     * @return array
     * @author moriwaki
     */
    public function getQueryResult($sql, $pagerOption, $type='one')
    {
        $db = self::getInstance();
        if ($type == 'one') {
            $result = $db->queryRow($sql);
        }else if ($type == 'pager'){
            $result = BEAR_Mdb2::queryPager($db, $sql, $pagerOption);
        }
        return $result;
    }
    
    /**
     * gatLastInsertID
     *
     * @return void
     * @author moriwaki
     */
    public function getLastInsertID()
    {
        $sql = 'SELECT last_insert_id()';
        return $this->getOne($sql);
    }
}